package org.rujue.common.persistence;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.rujue.common.utils.IdGen;
import org.rujue.modules.sys.entity.User;
import org.rujue.modules.sys.utils.UserUtils;

import java.io.Serial;
import java.util.Date;

/**
 * 数据实体类
 */
@Data
public abstract class DataEntity<T> extends BaseEntity<T> {

	@Serial
	private static final long serialVersionUID = 1L;
	/** 排序 */
	protected Integer sort;
	/** 备注 */
	protected String remarks;
	/** 创建者 */
	protected User createBy;
	/** 创建时间 */
	protected Date createDate;
	/** 更新者 */
	protected User updateBy;
	/** 更新时间 */
	protected Date updateDate;
	/** 删除标记（0：正常；1：删除；） */
	protected String delFlag;

	/** 日期范围开始 */
	protected String dateRangeBegin;
	/** 日期范围结束 */
	protected String dateRangeEnd;

	public DataEntity() {
		super();
		this.delFlag = DEL_FLAG_NORMAL;
	}
	
	public DataEntity(String id) {
		super(id);
	}
	
	/**
	 * 插入之前执行方法，需要手动调用
	 */
	@Override
	public void preInsert(){
		// 不限制ID为UUID，调用setIsNewRecord()使用自定义ID
		if (!this.isNewRecord){
			setId(IdGen.uuid());
		}
		User user = UserUtils.getUser();
		if (StringUtils.isNotBlank(user.getId())){
			this.updateBy = user;
			this.createBy = user;
		}
		this.updateDate = new Date();
		this.createDate = this.updateDate;
	}
	
	/**
	 * 更新之前执行方法，需要手动调用
	 */
	@Override
	public void preUpdate(){
		User user = UserUtils.getUser();
		if (StringUtils.isNotBlank(user.getId())){
			this.updateBy = user;
		}
		this.updateDate = new Date();
	}


	public static String getDateRangeBegin(String dateRange){
		String cleanedDateRange = dateRange.replaceAll("\\s+", "");
		String[] dateRangeArr = cleanedDateRange.split("-", 4); // 分割成4部分，确保前两个部分和后两个部分分别组成两个日期
		return dateRangeArr[0] + "-" + dateRangeArr[1] + "-" + dateRangeArr[2];
	}

	public static String getDateRangeEnd(String dateRange){
		String cleanedDateRange = dateRange.replaceAll("\\s+", "");
		String[] dateRangeArr = cleanedDateRange.split("-", 4); // 分割成4部分，确保前两个部分和后两个部分分别组成两个日期
		return dateRangeArr[3];
	}



}
